Today, computer systems often support multiple operating systems within a single machine environment. Typically, a machine environment is controlled by a main operating system. The main operating system creates one or more virtual machine environments, which are all subordinate to the environment maintained by the main operating system. Within a particular virtual machine environment, a guest operating system is able to operate and spawn individual user tasks. From the perspective of any individual user task, the guest operating system appears to be the only and omnipotent controlling factor within the virtual machine environment. In fact, an individual user task executing in a virtual machine environment typically cannot even tell that it is not operating in a stand-alone computing environment. For all intents and purposes, a virtual machine environment appears no different than a dedicated computing environment, at least from the perspective of a user task. In most instances, a virtual machine environment provided for a guest operating system is essentially transparent to the guest operating system. As such, a guest operating system executing in a virtual machine environment, in most cases, also cannot tell that it is not executing in a dedicated computing environment.
In order to provide this level of transparency, the main operating system which establishes a virtual machine environment installs the proper services such that the guest operating system cannot tell that it is executing in a virtual environment. Typically, this means that a guest operating system really interacts with services provided by the main operating system. Accordingly, the guest operating system does not have direct access to any peripherals attached to a real computing environment within which the virtual machine environment exists.
By establishing services for interacting with input and output devices, a main operating system must, by definition, interact with the input and output devices and must preclude such interaction by any other executing process, even if that executing process is a guest operating system executing in a virtual machine environment. As a result, the guest operating system only thinks that it is controlling the input or output device. In reality, the guest operating system is employing the services provided by the main operating system. This results in a devastating impact to the performance offered by the main computing environment which is hosting one or more virtual machine environments.
One common form of input or output interaction performed by the main operating system is that of controlling a direct memory access device. A direct memory access unit is typically responsible for moving information from the input device to a system memory or from the system memory to an output device. In order to provide transparent services to a guest operating system, the main operating system must directly control the direct memory access device. This control typically includes managing input and output buffers in a memory and directing a direct memory access unit to use a pre-established buffer. All this interaction is accomplished in accordance with a particular memory access protection schema, which is typically managed by the main operating system. A subordinate memory access protection schema may actually exist in a virtual machine environment, but that memory protection scheme typically does not deal with physical devices such as input and output peripherals attached to the real computing environment managed by the main operating system.